Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / backend / appcontainer_launcher.py

Displaying Raw • Download


meshchatx/src/backend/appcontainer_launcher.py fa46dc4ce9ab50cbe66a7a9e4b3bca0140102345 (fa46dc4c) Text, 3.34 KB

T8b949e# SPDX-License-Identifier: 0BSD

T8b949e"""Supervisor that launches the MeshChatX backend inside an AppContainer.

Invoked as:

ReticulumMeshChatX.exe --meshchatx-run-module meshchatx.src.backend.appcontainer_launcher --headless ...

After --meshchatx-run-module stripping, argv is the real backend argv.
"""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72import T7ee787logging
Tff7b72import T7ee787os
Tff7b72import T7ee787sys
Tff7b72import T7ee787tempfile

Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787appcontainer_sandbox Tff7b72import Tb4b4b4(
Te6edf3LaunchResultTb4b4b4,
Te6edf3appcontainer_forcedTb4b4b4,
Te6edf3appcontainer_supportedTb4b4b4,
Te6edf3is_appcontainer_childTb4b4b4,
Te6edf3launch_backend_sandboxedTb4b4b4,
Tb4b4b4)

Te6edf3logger Tff7b72= Te6edf3loggingTff7b72.Td2a8ffgetLoggerTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.appcontainer.launcherTa5d6ff"Tb4b4b4)


Tff7b72def Td2a8ff_parse_dir_flagTb4b4b4(Te6edf3argvTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4, Te6edf3flagTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3iTb4b4b4, Te6edf3arg Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3argvTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3arg Tff7b72== Te6edf3flag Tff7b72and Te6edf3i Tff7b72+ T79c0ff1 Tff7b72< Tffa657lenTb4b4b4(Te6edf3argvTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3argvTb4b4b4[Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3argTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3flag Tff7b72+ Ta5d6ff"Ta5d6ff=Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3argTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff=Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72return Tff7b72None


Tff7b72def Td2a8ff_resolve_pathsTb4b4b4(Te6edf3argvTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657str Tff7b72| Tff7b72NoneTb4b4b4, Tffa657str Tff7b72| Tff7b72NoneTb4b4b4, Tffa657str Tff7b72| Tff7b72NoneTb4b4b4]Tb4b4b4:
Te6edf3storage Tff7b72= Te6edf3_parse_dir_flagTb4b4b4(Te6edf3argvTb4b4b4, Ta5d6ff"Ta5d6ff--storage-dirTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(
Ta5d6ff"Ta5d6ffMESHCHAT_STORAGE_DIRTa5d6ff"
Tb4b4b4)
Te6edf3reticulum Tff7b72= Te6edf3_parse_dir_flagTb4b4b4(Te6edf3argvTb4b4b4, Ta5d6ff"Ta5d6ff--reticulum-config-dirTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(
Ta5d6ff"Ta5d6ffMESHCHAT_RETICULUM_CONFIG_DIRTa5d6ff"
Tb4b4b4)
Te6edf3log_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_LOG_DIRTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3log_dir Tff7b72and Te6edf3storageTb4b4b4:
Te6edf3log_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3storageTb4b4b4, Ta5d6ff"Ta5d6fflogsTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3storageTb4b4b4, Te6edf3reticulumTb4b4b4, Te6edf3log_dir


Tff7b72def Td2a8ffrun_launcherTb4b4b4(Te6edf3argvTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
T8b949e"""Launch the backend under AppContainer and return its exit code."""
Tff7b72if Te6edf3argv Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3argv Tff7b72= Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]

Tff7b72if Te6edf3is_appcontainer_childTb4b4b4(Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(
Ta5d6ff"Ta5d6fferror: appcontainer_launcher must not run inside an AppContainer childTa5d6ff"Tb4b4b4,
Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4,
Tb4b4b4)
Tff7b72return T79c0ff2

Tff7b72if Te6edf3sysTff7b72.Td2a8ffplatform Tff7b72!= Ta5d6ff"Ta5d6ffwin32Ta5d6ff"Tb4b4b4:
Tffa657printTb4b4b4(
Ta5d6ff"Ta5d6fferror: AppContainer launcher is only supported on WindowsTa5d6ff"Tb4b4b4,
Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4,
Tb4b4b4)
Tff7b72return T79c0ff2

Tff7b72if Tff7b72not Te6edf3appcontainer_supportedTb4b4b4(Tb4b4b4) Tff7b72and Te6edf3appcontainer_forcedTb4b4b4(Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(
Ta5d6ff"Ta5d6fferror: MESHCHAT_APPCONTAINER=1 but AppContainer APIs are unavailableTa5d6ff"Tb4b4b4,
Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4,
Tb4b4b4)
Tff7b72return T79c0ff2

Te6edf3exe Tff7b72= Te6edf3sysTff7b72.Td2a8ffexecutable
Tff7b72if Tff7b72not Te6edf3exeTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6fferror: sys.executable is unsetTa5d6ff"Tb4b4b4, Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4)
Tff7b72return T79c0ff2

Te6edf3storage_dirTb4b4b4, Te6edf3reticulum_config_dirTb4b4b4, Te6edf3log_dir Tff7b72= Te6edf3_resolve_pathsTb4b4b4(Te6edf3argvTb4b4b4)
T8b949e# Ensure temp exists before ACL grant.
Tff7b72tryTb4b4b4:
Te6edf3tempfileTff7b72.Td2a8ffgettempdirTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass

Te6edf3resultTb4b4b4: Te6edf3LaunchResult Tff7b72= Te6edf3launch_backend_sandboxedTb4b4b4(
Te6edf3exeTb4b4b4,
Tffa657listTb4b4b4(Te6edf3argvTb4b4b4)Tb4b4b4,
Te6edf3storage_dirTff7b72=Te6edf3storage_dirTb4b4b4,
Te6edf3reticulum_config_dirTff7b72=Te6edf3reticulum_config_dirTb4b4b4,
Te6edf3log_dirTff7b72=Te6edf3log_dirTb4b4b4,
Te6edf3forcedTff7b72=Te6edf3appcontainer_forcedTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72if Te6edf3resultTff7b72.Td2a8fffell_backTb4b4b4:
Te6edf3loggerTff7b72.Td2a8ffwarningTb4b4b4(
Ta5d6ff"Ta5d6ffAppContainer unavailable, ran unsandboxed backend (exit=Tffd700%sTa5d6ff)Ta5d6ff"Tb4b4b4,
Te6edf3resultTff7b72.Td2a8ffexit_codeTb4b4b4,
Tb4b4b4)
Tff7b72elif Te6edf3resultTff7b72.Td2a8ffused_appcontainerTb4b4b4:
Te6edf3loggerTff7b72.Td2a8ffinfoTb4b4b4(Ta5d6ff"Ta5d6ffBackend exited from AppContainer (exit=Tffd700%sTa5d6ff)Ta5d6ff"Tb4b4b4, Te6edf3resultTff7b72.Td2a8ffexit_codeTb4b4b4)

Tff7b72if Tff7b72not Te6edf3resultTff7b72.Td2a8ffokTb4b4b4:
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6fferror: AppContainer launch failed: Tffd700{Te6edf3resultTff7b72.Td2a8fferrorTffd700}Ta5d6ff"Tb4b4b4,
Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4,
Tb4b4b4)
Tff7b72return T79c0ff1

Tff7b72return Tffa657intTb4b4b4(Te6edf3resultTff7b72.Td2a8ffexit_code Tff7b72if Te6edf3resultTff7b72.Td2a8ffexit_code Tff7b72is Tff7b72not Tff7b72None Tff7b72else T79c0ff0Tb4b4b4)


Tff7b72def Td2a8ffmainTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72raise Tf85149SystemExitTb4b4b4(Te6edf3run_launcherTb4b4b4(Tb4b4b4)Tb4b4b4)


Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3mainTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────